DynamoDBのSet型で、新しいAttributeに対するaddをした場合にどうなるのか試してみた
DynamoDBにはSet型があります。Set型のデータを追加するときは、setまたはaddの更新式を利用します。このとき、すでに存在するAttributeに対するaddではなく、新しいAttributeに対するaddをした場合にどうなるのか気になったので、試してみました。
おすすめの方
- DynamoDBのSet型で新しいAttributeに対するaddをした場合にどうなるのか知りたい方
- DynamoDBのSet型でデータをaddの更新式を利用して追加したい方
適当なDynamoDBテーブルを用意する
次のDynamoDBテーブルを作成します。
- Name: set-test-table
- PK: itemId
aws dynamodb create-table \
--table-name set-test-table \
--attribute-definitions AttributeName=itemId,AttributeType=S \
--key-schema AttributeName=itemId,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
DynamoDBテーブルに適当なデータを新規作成する
適当なデータを新規作成するスクリプト
import boto3
table = boto3.resource("dynamodb").Table("set-test-table")
def main() -> None:
put({"itemId": "item777"})
def put(item: dict) -> None:
table.put_item(Item=item)
if __name__ == "__main__":
main()
パーティションキーだけのItemが追加されました。
DynamoDBテーブルにSet型のデータをaddする
Set型のデータをaddするスクリプト
import boto3
table = boto3.resource("dynamodb").Table("set-test-table")
def main() -> None:
update("item777", {"apple", "banana"})
update("item777", {"cherry", "durian"})
def update(item_id: str, fruit: set[str]) -> None:
table.update_item(
Key={"itemId": item_id},
UpdateExpression="ADD #fruit :fruit",
ExpressionAttributeNames={"#fruit": "fruit"},
ExpressionAttributeValues={":fruit": fruit},
)
if __name__ == "__main__":
main()
Set型のデータが追加されました。2連続でaddしても問題ありません。
さいごに
DynamoDBのSet型で、新しいAttributeに対するaddは問題なく実行できました。